package com.JavaBasic;

public class StringDemo {

	public static void main(String[] args) {
		// String 构造方法
		// 通过byte数组初始化String
		byte[] b = {97,98,99}; 
		String s1 = new String(b);
		System.out.println("通过byte数组初始化String:" + s1);
		
		// byte数组中指定的范围byte初始化String
		// 转换98和99两个元素
		String s2 = new String(b, 1, 2);
		System.out.println("截取byte数组初始化String:" + s2);
		
		// 通过字符数组初始化String
		char[] c = {'a','b','c','d','e'};
		String s3 = new String(c);
		System.out.println("通过字符数组初始化String:" + s3);
		
		// 字符数组中自定字符初始化String
		String s4 = new String(c, 2, 3);
		System.out.println("截取字符数组初始化String:" + s4);
		
		// String比较方法
		// equals()比较两个字符串的字节码是否相同
		// equalsIgnoreCase()忽略大小写比较两个字符串字节码是否相同
		String s5 = "abcdefg";
		String s6 = "ABCdefg";
		String s7 = "abcdefg";
		System.out.println(s5.equals(s6));
		System.out.println(s5.equals(s7));
		System.out.println(s5.equalsIgnoreCase(s6));
		System.out.println(s5.equalsIgnoreCase(s7));
		
		// contains()是否包含子字符串
		// startsWith()是否以子字符串开头
		// endsWith()是否以子字符串结束
		// isEmpty()是否是空字符串
		String s8 = "cde";
		System.out.println(s5.contains(s8));
		System.out.println(s5.startsWith("abc"));
		System.out.println(s5.endsWith("efg"));
		System.out.println("".isEmpty());
		
		// String获取方法
//		getStringDemo();
		
		// String转换
//		translationStringDemo();
		
		// String中的其他方法
		otherStringDemo();
	}

	private static void otherStringDemo() {
		// replace()替换字符串中自定的字符
		// trim()去掉字符串前后的空格
		String s1 = "helloWorld";
		String s2 = s1.replace('e', 'w');
		System.out.println(s2);
		String s3 = " HelloWorld  ";
		System.out.println(s3.trim());
	}

	// String转换
	private static void translationStringDemo() {
		// getBytes()把字符串转换成字节数组
		String s1 = "哈呵咯";
		byte[] bs = s1.getBytes();
		for (int i = 0; i < bs.length; i++) {
			System.out.println(bs[i]);
		}
		
		// toCharArray()把字符串转换成字符数组
		char[] cs = s1.toCharArray();
		for (int i = 0; i < cs.length; i++) {
			System.out.println(cs[i]);
		}
		
		// valueOf()可以吧任意类型的数据转换成字符串
		String s2 = String.valueOf(cs);
		System.out.println(s2);
		
		// toLowerCase()将字符串中所有的字符转换成小写
		// toUpperCase()将字符串中所有的字符转换成大写
		String s3 = "abcDefGT";
		System.out.println(s3.toLowerCase());
		System.out.println(s3.toUpperCase());
		
		// concat()将两个字符串连接
		String s4 = s3.concat(s2);
		System.out.println(s4);
	}

	// String获取方法
	private static void getStringDemo() {
		// 获取String长度 length()
		String s1 = "abcdghjk";
		System.out.println(s1.length());
		
		// 获取字符串中指定索引处的字符
		char c = s1.charAt(3);
		System.out.println(c);
		
		// 获取字符/子字符串在字符串中的索引 
		// indexOf(int c)
		// indexOf(int c,int fromIndex)
		// lastIndexof() 从后面查找，参数和indexOf方法一样
		char c2 = 'j';
		String s2 = "gh";
		System.out.println(s1.indexOf(c2));
		System.out.println(s1.indexOf(s2));
		
		// 截取字符串
		// substring(int startIndex) 从开始索引到字符串末尾
		// string(int startIndex, int endIndex) 指定截取的开始结束索引
		System.out.println(s1.substring(3));
		System.out.println(s1.subSequence(3, 6));
	}
}
